//双端队列数据结构
// addFront(element):双端队列 前面增加元素
// addBack(element):双端队列 后面增加元素 （Queue类中的enqueue）
// removeFront():双端队列 删除前面第一个元素 （Queue类中的dequeue）
// removeBack():双端队列 删除后面第一个元素 （Stack类中的pop）
// peekFront():双端队列 返回 前面的第一个元素 （Queue类中的peek）
// peekBack():双端队列 返回 后面第一个元素 （Stack类中的peek）

class Deque{
	constructor() {
		this.items = {};
		this.lowestCount = 0;
		this.count = 0;
	}
	addFront(element) {   //向双端队列中添加元素
		if(this.isEmpty()){         //队列为空 直接在后面添加元素
			this.addBack(element)
		} else if(this.lowestCount > 0) {
			//删除第一个后，再添加新的元素
			this.lowestCount--;
			this.items[this.lowestCount] = element;
		} else {
			//在前面添加元素 后面的元素一次往后移一位
			for(let i = this.count; i > 0; i--){
				this.items[i] =this.items[i-1]
			}
			this.count++;
			this.lowestCount = 0;
			this.items[0] = element
		}
	}
	isEmpty() {
		return this.items === 0
	}
	addBack(element){
		     //向队列后端添加元素
			this.items[this.count] = element;  //count作为对象的键
			this.count++;                       //新增后 count+1
	}

}


const deque = new Deque();
deque.addBack('Tom')
deque.addBack('Bob')
deque.addFront('James')
console.log(deque)